<?php
class ControllerProductSpecial extends Controller {
	public function index() {
		$this->language->load('product/special');
		
		$this->load->model('catalog/product');
		
		$this->load->model('tool/image');
		
		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		}
		else {
			$sort = 'p.sort_order';
		}
		
		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		}
		else {
			$order = 'ASC';
		}
		
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		}
		else {
			$page = 1;
		}
		
		if (isset($this->request->get['limit'])) {
			$limit = $this->request->get['limit'];
		}
		else {
			$limit = $this->config->get('config_catalog_limit');
		}
		
		$this->document->setTitle($this->language->get('heading_title'));
		
		$this->data['breadcrumbs'] = array();
		
		$this->data['breadcrumbs'][] = array( 
			'text' => $this->language->get('text_home'), 
			'href' => $this->url->link('common/home'), 
			'separator' => false 
		);
		
		$url = '';
		
		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}
		
		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}
		
		if (isset($this->request->get['page'])) {
			$url .= '&page=' . $this->request->get['page'];
		}
		
		if (isset($this->request->get['limit'])) {
			$url .= '&limit=' . $this->request->get['limit'];
		}
		
		$this->data['breadcrumbs'][] = array( 
			'text' => $this->language->get('heading_title'), 
			'href' => $this->url->link('product/special', $url), 
			'separator' => $this->language->get('text_separator') 
		);
		
		$this->data['heading_title'] = $this->language->get('heading_title');
		
		$this->data['text_empty'] = $this->language->get('text_empty');
		$this->data['text_quantity'] = $this->language->get('text_quantity');
		$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
		$this->data['text_model'] = $this->language->get('text_model');
		$this->data['text_price'] = $this->language->get('text_price');
		$this->data['text_tax'] = $this->language->get('text_tax');
		$this->data['text_points'] = $this->language->get('text_points');
		$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
		$this->data['text_display'] = $this->language->get('text_display');
		$this->data['text_list'] = $this->language->get('text_list');
		$this->data['text_grid'] = $this->language->get('text_grid');
		$this->data['text_sort'] = $this->language->get('text_sort');
		$this->data['text_limit'] = $this->language->get('text_limit');
		
		$this->data['button_cart'] = $this->language->get('button_cart');
		$this->data['button_wishlist'] = $this->language->get('button_wishlist');
		$this->data['button_compare'] = $this->language->get('button_compare');
		
		$this->data['compare'] = $this->url->link('product/compare');
		
		$this->data['products'] = array();
		
		$data = array( 
			'sort' => $sort, 
			'order' => $order, 
			'start' => ($page - 1) * $limit, 
			'limit' => $limit 
		);
		
		$product_total = $this->model_catalog_product->getTotalProductSpecials($data);
		
		$results = $this->model_catalog_product->getProductSpecials($data);
		
		foreach ($results as $result) {
			if ($result['image']) {
				$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
			}
			else {
				$image = false;
			}
			
			if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
				$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
			}
			else {
				$price = false;
			}
			
			if ((float) $result['special']) {
				$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
			}
			else {
				$special = false;
			}
			
			if ($this->config->get('config_tax')) {
				$tax = $this->currency->format((float) $result['special'] ? $result['special'] : $result['price']);
			}
			else {
				$tax = false;
			}
			
			if ($this->config->get('config_review_status')) {
				$rating = (int) $result['rating'];
			}
			else {
				$rating = false;
			}
			
			$this->data['products'][] = array( 
				'product_id' => $result['product_id'], 
				'thumb' => $image, 
				'name' => $result['name'], 
				'old_name' => $result['old_name'], 
				'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..', 
				'price' => $price, 
				'special' => $special, 
				'tax' => $tax, 
				'rating' => $result['rating'], 
				'reviews' => sprintf($this->language->get('text_reviews'), (int) $result['reviews']), 
				'href' => $this->url->link('product/product', $url . '&product_id=' . $result['product_id']) 
			);
		}
		
		$url = '';
		
		if (isset($this->request->get['limit'])) {
			$url .= '&limit=' . $this->request->get['limit'];
		}
		
		$this->data['sorts'] = array();
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_default'), 
			'value' => 'p.sort_order-ASC', 
			'href' => $this->url->link('product/special', 'sort=p.sort_order&order=ASC' . $url) 
		);
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_name_asc'), 
			'value' => 'pd.name-ASC', 
			'href' => $this->url->link('product/special', 'sort=pd.name&order=ASC' . $url) 
		);
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_name_desc'), 
			'value' => 'pd.name-DESC', 
			'href' => $this->url->link('product/special', 'sort=pd.name&order=DESC' . $url) 
		);
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_price_asc'), 
			'value' => 'ps.price-ASC', 
			'href' => $this->url->link('product/special', 'sort=ps.price&order=ASC' . $url) 
		);
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_price_desc'), 
			'value' => 'ps.price-DESC', 
			'href' => $this->url->link('product/special', 'sort=ps.price&order=DESC' . $url) 
		);
		
		if ($this->config->get('config_review_status')) {
			$this->data['sorts'][] = array( 
				'text' => $this->language->get('text_rating_desc'), 
				'value' => 'rating-DESC', 
				'href' => $this->url->link('product/special', 'sort=rating&order=DESC' . $url) 
			);
			
			$this->data['sorts'][] = array( 
				'text' => $this->language->get('text_rating_asc'), 
				'value' => 'rating-ASC', 
				'href' => $this->url->link('product/special', 'sort=rating&order=ASC' . $url) 
			);
		}
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_model_asc'), 
			'value' => 'p.model-ASC', 
			'href' => $this->url->link('product/special', 'sort=p.model&order=ASC' . $url) 
		);
		
		$this->data['sorts'][] = array( 
			'text' => $this->language->get('text_model_desc'), 
			'value' => 'p.model-DESC', 
			'href' => $this->url->link('product/special', 'sort=p.model&order=DESC' . $url) 
		);
		
		$url = '';
		
		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}
		
		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}
		
		$this->data['limits'] = array();
		
		$this->data['limits'][] = array( 
			'text' => $this->config->get('config_catalog_limit'), 
			'value' => $this->config->get('config_catalog_limit'), 
			'href' => $this->url->link('product/special', $url . '&limit=' . $this->config->get('config_catalog_limit')) 
		);
		
		$this->data['limits'][] = array( 
			'text' => 25, 
			'value' => 25, 
			'href' => $this->url->link('product/special', $url . '&limit=25') 
		);
		
		$this->data['limits'][] = array( 
			'text' => 50, 
			'value' => 50, 
			'href' => $this->url->link('product/special', $url . '&limit=50') 
		);
		
		$this->data['limits'][] = array( 
			'text' => 75, 
			'value' => 75, 
			'href' => $this->url->link('product/special', $url . '&limit=75') 
		);
		
		$this->data['limits'][] = array( 
			'text' => 100, 
			'value' => 100, 
			'href' => $this->url->link('product/special', $url . '&limit=100') 
		);
		
		$url = '';
		
		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}
		
		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}
		
		if (isset($this->request->get['limit'])) {
			$url .= '&limit=' . $this->request->get['limit'];
		}
		
		$pagination = new Pagination();
		$pagination->total = $product_total;
		$pagination->page = $page;
		$pagination->limit = $limit;
		$pagination->text = $this->language->get('text_pagination');
		$pagination->url = $this->url->link('product/special', $url . '&page={page}');
		
		$this->data['pagination'] = $pagination->render();
		
		$this->data['sort'] = $sort;
		$this->data['order'] = $order;
		$this->data['limit'] = $limit;
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/special.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/product/special.tpl';
		}
		else {
			$this->template = 'default/template/product/special.tpl';
		}
		
		$this->children = array( 
			'common/column_left', 
			'common/column_right', 
			'common/content_top', 
			'common/content_bottom', 
			'common/footer', 
			'common/header' 
		);
		
		$this->response->setOutput($this->render());
	}
	
	/**
	 * 推荐商品
	 */
	public function oth() {
		$this->load->model('catalog/product');
		$this->load->model('tool/image');
		
		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		}
		else {
			$sort = 'p.sort_order';
		}
		
		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		}
		else {
			$order = 'ASC';
		}
		
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		}
		else {
			$page = 1;
		}
		
		if (isset($this->request->get['limit'])) {
			$limit = $this->request->get['limit'];
		}
		else {
			$limit = $this->config->get('config_catalog_limit');
		}
		
		$type = isset($this->request->get['type']) ? htmlspecialchars($this->request->get['type']) : "is_rec";
		$this->data['type'] = $type;
		if ('is_rec' == $type) {
			$this->data['type_word'] = "Recommendations";
		}
		elseif ('is_sale' == $type) {
			$this->data['type_word'] = 'On Sale';
		}
		elseif ('is_best' == $type) {
			$this->data['type_word'] = 'Best Sales';
			$limit = 100;
		}
		$this->document->setTitle($this->data['type_word']);
		/**
		 * ***排序********
		 */
		$this->data['name_order'] = $this->data['price_order'] = $this->data['sell_order'] = $this->data['review_order'] = 'ASC';
		if (isset($this->request->get['order'])) {
			$sorts = isset($this->request->get['sort']) ? $this->request->get['sort'] : '';
			$css = $this->data['name_css'] = $this->data['price_css'] = $this->data['sell_css'] = $this->data['review_css'] = " background: url('catalog/view/theme/default/images/icon_06.png') no-repeat scroll right center transparent;";
			$status = $this->switch_s($this->request->get['order'], $css);
			
			if ('pd.name' == $sorts) {
				$this->data['name_order'] = $status;
				$this->data['name_css'] = $css;
			}
			elseif ('p.price' == $sorts) {
				$this->data['price_order'] = $status;
				$this->data['price_css'] = $css;
			}
			elseif ('total_num' == $sorts) {
				$this->data['sell_order'] = $status;
				$this->data['sell_css'] = $css;
			}
			elseif ('p.viewed' == $sorts) {
				$this->data['review_order'] = $status;
				$this->data['review_css'] = $css;
			}
		}
		
		$data = array( 
			$type => 1, 
			'sort' => $sort, 
			'order' => $order, 
			'start' => ($page - 1) * $limit, 
			'limit' => $limit 
		);
		if ('is_best' == $type) {
			$product_total = $this->model_catalog_product->getBestSellerTotal($data);
			$results = $this->model_catalog_product->getBestSellerProducts($limit);
		}
		elseif ('is_sale' == $type) {
			$product_total = $this->model_catalog_product->getOnSaleTotalProducts();
			$results = $this->model_catalog_product->getOnSaleProducts($data);
		}
		else {
			$product_total = $this->model_catalog_product->getTotalProducts($data);
			$results = $this->model_catalog_product->getProducts($data);
		}
		
		foreach ($results as $result) {
			if ($result['image']) {
				$image = $this->model_tool_image->resize($result['image'], 121, 117);
			}
			else {
				$image = false;
			}
			
			if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
				$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
			}
			else {
				$price = false;
			}
			
			if ((float) $result['special']) {
				$special = str_replace("CAD", "", $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))));
			}
			else {
				$special = false;
			}
			
			if ($this->config->get('config_tax')) {
				$tax = $this->currency->format((float) $result['special'] ? $result['special'] : $result['price']);
			}
			else {
				$tax = false;
			}
			
			if ($this->config->get('config_review_status')) {
				$rating = (int) $result['rating'];
			}
			else {
				$rating = false;
			}
			
			$this->data['products'][] = array( 
				'product_id' => $result['product_id'], 
				'thumb' => $image, 
				'name' => $result['name'], 
				'old_name' => $result['old_name'], 
				'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..', 
				'price' => $result['price'], 
				'special' => $special, 
				'discount' => $result['discount_per'], 
				'tax' => $tax, 
				'rating' => $result['rating'], 
				'reviews' => sprintf($this->language->get('text_reviews'), (int) $result['reviews']), 
				'href' => $this->url->link('product/product', '&product_id=' . $result['product_id']) 
			);
		}
		$url = '';
		
		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}
		
		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}
		
		if (isset($this->request->get['limit'])) {
			$url .= '&limit=' . $this->request->get['limit'];
		}
		$pagination = new Pagination();
		$pagination->total = $product_total;
		$pagination->page = $page;
		$pagination->limit = $limit;
		$pagination->text = $this->language->get('text_pagination');
		$pagination->url = $this->url->link('product/special/oth', $url . '&page={page}&type=' . $type);
		$this->data['pagination'] = $pagination->render();
		
		$this->data['total'] = $product_total;
		$this->data['start'] = ($page - 1) * $limit;
		$this->data['end'] = $page * $limit;
		$this->data['sort'] = $sort;
		$this->data['order'] = $order;
		$this->data['limit'] = $limit;
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/oth.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/product/oth.tpl';
		}
		else {
			$this->template = 'default/template/product/oth.tpl';
		}
		
		$this->children = array( 
			'common/column_left', 
			'common/column_right', 
			'common/content_top', 
			'common/content_bottom', 
			'common/footer', 
			'common/header' 
		);
		
		$this->response->setOutput($this->render());
	}
	private function switch_s($status, &$css) {
		if ('ASC' == $status) {
			$css = "background: url('catalog/view/theme/default/images/arrow-270-medium.png') no-repeat scroll right center transparent;";
			return 'DESC';
		}
		else {
			return 'ASC';
		}
	}
}
?>